﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using System.Data;
using ForrajeriaDB;

namespace ForrajeriaFRONT
{
    public partial class PedidosCliente : System.Web.UI.Page
    {

        ForrajeBCL forrajeBC = new ForrajeBCL();
        PedidoClienteBCL pedidoClienteBC = new PedidoClienteBCL();
        PedidoClienteMO pedidoClienteMO = new PedidoClienteMO();
        UsuarioBCL userBC = new UsuarioBCL();
        double total = 0;


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ((Label)this.Master.FindControl("lblTitulo")).Text = "Pedido Cliente";

                Label1.Visible = false;
                Label2.Visible = false;
                calendar.Visible = false;
                btnGenerarPedido.Visible = false;
                //lblMensaje.Enabled = false;
                GridPedido = null;
                cargarGrilla();
                cargarComboMarca();
                cargarComboEdad();

                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("codigoForraje", typeof(int)));
                dt.Columns.Add(new DataColumn("nombreForraje", typeof(string)));
                dt.Columns.Add(new DataColumn("descripcion", typeof(string)));
                dt.Columns.Add(new DataColumn("Nombre", typeof(string)));
                dt.Columns.Add(new DataColumn("peso", typeof(string)));
                dt.Columns.Add(new DataColumn("descripcionEdad", typeof(string)));
                dt.Columns.Add(new DataColumn("cantidad", typeof(string)));
                dt.Columns.Add(new DataColumn("precioKilo", typeof(string)));
                dt.Columns.Add(new DataColumn("precioTotal", typeof(string)));
                ViewState["CurrentTable"] = dt;
            }
        }

        protected void cargarGrilla()
        {
            gridDatos.DataSource = null;

            DataTable dt = forrajeBC.obtenerProductos();
            string[] keys = new string[1];
            keys[0] = "codigoForraje";


            gridDatos.DataKeyNames = keys;//Crea una columna de keys names con el codigo de forraje en la grilla
            gridDatos.DataSource = dt;

            gridDatos.DataBind();

        }
        protected void cargarComboEdad()
        {
            ddlEdad.DataSource = null;
            EdadesBCL edadBC = new EdadesBCL();

            List<EdadesMO> listaEdades = edadBC.GetAll();

            ddlEdad.Items.Add(new ListItem("---Seleccione---", "0"));

            foreach (EdadesMO aux in listaEdades)
            {
                ddlEdad.Items.Add(new ListItem(aux.Descripcion.ToString(), aux.CodigoEdad.ToString()));
            }
        }
        protected void cargarComboMarca()
        {
            ddlMarca.DataSource = null;

            MarcaBCL objMarca = new MarcaBCL();
            List<MarcaMO> listaMarca = objMarca.GetAll();



            ddlMarca.Items.Add(new ListItem("---Seleccione---", "0"));
            foreach (MarcaMO aux in listaMarca)
            {
                ddlMarca.Items.Add(new ListItem(aux.Nombre.ToString(), aux.CodigoMarca.ToString()));

            }


        }


        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            DataTable dt = null;

            dt = forrajeBC.buscarProductos(txtProducto.Text, int.Parse(ddlEdad.SelectedValue), int.Parse(ddlMarca.SelectedValue));
            gridDatos.DataSource = dt;
            gridDatos.DataBind();

        }

        protected void gridDatos_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {

            if (!Page.IsValid) return;
            Page.Validate("gCantidad");

            if (Page.IsValid)
            {

                int ind = e.NewSelectedIndex;
                bool agregar = true;
                if (int.Parse(txtCantidad.Text) <= Double.Parse(gridDatos.Rows[ind].Cells[5].Text))
                {
                    DataTable dt = (DataTable)ViewState["CurrentTable"];

                    foreach (DataRow aux in dt.Rows)
                    {
                        if ((double.Parse(aux["codigoForraje"].ToString())) == (double.Parse(gridDatos.DataKeys[ind].Value.ToString())))
                        {
                            double cant = double.Parse(aux["cantidad"].ToString());
                            double suma = cant + double.Parse(txtCantidad.Text);
                            if (suma <= Double.Parse(gridDatos.Rows[ind].Cells[5].Text))
                            {
                                aux["cantidad"] = (cant + double.Parse(txtCantidad.Text)).ToString();
                                aux["precioTotal"] = double.Parse(aux["cantidad"].ToString()) * double.Parse(aux["peso"].ToString()) * double.Parse(aux["precioKilo"].ToString());
                                agregar = false;

                            }
                            else
                            {
                                lblMensaje.Text = "No hay Stock Suficiente de ese producto";
                                lblMensaje.Enabled = true;
                                return;
                            }
                        }
                    }

                    if (agregar)
                    {
                        Label1.Visible = true;
                        Label2.Visible = true;
                        calendar.Visible = true;
                        btnGenerarPedido.Visible = true;
                        DataRow dr = null;

                        dr = dt.NewRow();
                        dr["codigoForraje"] = gridDatos.DataKeys[ind].Value;
                        dr["nombreForraje"] = gridDatos.Rows[ind].Cells[0].Text;
                        dr["descripcion"] = gridDatos.Rows[ind].Cells[1].Text;
                        dr["Nombre"] = gridDatos.Rows[ind].Cells[2].Text;
                        dr["peso"] = gridDatos.Rows[ind].Cells[3].Text;
                        dr["descripcionEdad"] = gridDatos.Rows[ind].Cells[4].Text;
                        dr["cantidad"] = txtCantidad.Text;
                        dr["precioKilo"] = gridDatos.Rows[ind].Cells[6].Text;
                        dr["precioTotal"] = double.Parse(txtCantidad.Text) * double.Parse(gridDatos.Rows[ind].Cells[3].Text) * double.Parse(gridDatos.Rows[ind].Cells[6].Text);

                        dt.Rows.Add(dr);
                    }

                    ViewState["CurrentTable"] = dt;
                    actualizarTotal();


                    GridPedido.DataSource = dt;

                    GridPedido.DataBind();

                    ForrajeBCL forrajeBC = new ForrajeBCL();

                    // forrajeBC.modificarStock();
                    gridDatos.SelectedIndex = -1;


                    CleanControl(this.Controls);
                    lblMensaje.Text = "";

                }
                else
                {
                    lblMensaje.Text = "No hay Stock Suficiente de ese producto";
                    lblMensaje.Enabled = true;
                    gridDatos.SelectedIndex = -1;


                }


            }
        }
        protected void gridDatos_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int i = e.RowIndex;
            DataTable dt = (DataTable)ViewState["CurrentTable"];

            dt.Rows.RemoveAt(i);

            // GridPedido.DeleteRow(i);

            GridPedido.DataSource = dt;
            GridPedido.DataBind();

            ViewState["CurrentTable"] = dt;

            actualizarTotal();
            CleanControl(Controls);
            lblMensaje.Text = "";

        }
        protected void actualizarTotal()
        {
            DataTable dt = (DataTable)ViewState["CurrentTable"];
            foreach (DataRow aux in dt.Rows)
            {
                total += double.Parse(aux["precioTotal"].ToString());

            }
            
           lblTotal.Text = "Total: " + total.ToString();
           
            if (total == 0)
            {
                Label1.Visible = false;
                Label2.Visible = false;
                calendar.Visible = false;
                btnGenerarPedido.Visible = false;
                lblTotal.Text = "";
            }
        }
       


        protected void Button1_Click(object sender, EventArgs e)
        {

            Validate("generar");
            //----------------------------------CARGA DATOS PEDIDO------------------------------------------
            if (Page.IsValid)
            {
                pedidoClienteMO.FechaAuto = null;
                pedidoClienteMO.EstadoPedido = "A";
                pedidoClienteMO.FechaDeseada = calendar.SelectedDate;
                pedidoClienteMO.FechaPedido = DateTime.Today;
                actualizarTotal();
                pedidoClienteMO.TotalPedido = total;

                UsuarioMO userMO = userBC.ComprobarDisponibilidad(Context.User.Identity.Name);

                pedidoClienteMO.Id_cliente = int.Parse(userMO.CodigoCliente.ToString());

                //----------------------------------FIN CARGA DATOS PEDIDO--------------------------------------
                DataTable dt = (DataTable)ViewState["CurrentTable"];



                lblMensaje.Text = pedidoClienteBC.adicionar(pedidoClienteMO, dt);

            }
            Response.Redirect("/MisPedidos.aspx");
        }

        public bool fechaSeleccionada()
        {
            if (calendar.SelectedDate == null)
            {
                lblMensaje.Text = "Debe Seleccionar una fecha";
                return false;
            }
            else
            {
                if (calendar.SelectedDate.CompareTo(DateTime.Today) < 0)
                {
                    lblMensaje.Text = "Debe seleccionar una fecha valida";
                    return false;
                }

                return true;
            }
        }
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();

                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        protected void cvCalendar_ServerValidate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = fechaSeleccionada();
        }

        protected void gridDatos_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}